// 这里的config是axios里所有的配置
const jsonpAdapter = (config) => {
  return new Promise((resolve, reject) => {
      // 是否已取消当前操作
      // 因jsonp没有主动取消请求的方式
      // 这里使用 isAbort 来标识
      let isAbort = false;

      // 定时器标识符
      let timer = null;

      // 执行方法的名字，
      const callbackName = `jsonp${Date.now()}_${Math.random()
          .toString()
          .slice(2)}`;

      // 这里假设已经实现了baseURL和url的拼接方法
      // const fullPath = buildFullPath(config.baseURL, config.url);

      // // 这里假设已经实现了url和参数的拼接方法
      // // 不太一样的地方在于，jsonp需要额外插入一个自己的回调方法
      // const url = buildURL(
      //     fullPath,
      //     {
      //         ...config.params,
      //         ...{ [config.jsonpCallback || 'callback']: callbackName },
      //     },
      //     config.paramsSerializer
      // );

      // // 创建一个script标签
      // let script = document.createElement('script');

      // // 成功执行操作后
      // function remove() {
      //     if (script) {
      //         script.onload = script.onerror = null;

      //         // 移除script标签
      //         if (script.parentNode) {
      //             script.parentNode.removeChild(script);
      //         }
      //         // 取消定时器
      //         if (timer) {
      //             clearTimeout(timer);
      //         }

      //         script = null;
      //     }
      // }

      // // 成功请求后
      // window[callbackName] = (data) => {
      //     // 若已需要请求，则不再执行
      //     if (isAbort) {
      //         return;
      //     }

      //     // 返回的格式
      //     const response = {
      //         status: 200,
      //         statusText: 'ok',
      //         config,
      //         request: script,
      //         data: data,
      //     };
      //     remove();
      //     // 实际上这里上一个settle操作，会额外判断是否是合理的status状态
      //     // 若我们在config.validateStatus中设置404是合理的，也会进入到resolve状态
      //     // 但我们这里就不实现这个了
      //     // settle(resolve, reject, response);
      //     resolve(response);
      // };

      // // 请求失败
      // script.onerror = function (error) {
      //     remove();

      //     reject(createError('Network Error', config, 404));
      // };

      // // 若设置了超时时间
      // if (config.timeout) {
      //     timer = setTimeout(function () {
      //         remove();
      //         // 取消当前操作
      //         isAbort = true;
      //         reject(
      //             createError(
      //                 'timeout of ' + config.timeout + 'ms exceeded',
      //                 config,
      //                 405
      //             )
      //         );
      //     }, config.timeout);
      // }

      // // 若定义了取消操作
      // if (config.cancelToken) {
      //     config.cancelToken.promise.then(function () {
      //         if (!script) {
      //             return;
      //         }
      //         remove();
      //         isAbort = true;

      //         reject(createError('Cancel Error', config, 404));
      //     });
      // }

      // script.src = url;
      // const target =
      //     document.getElementsByTagName('script')[0] || document.head;
      // target.parentNode && target.parentNode.insertBefore(script, target);
  });
};

export default jsonpAdapter;